// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_AURA_SCREEN_POSITION_CLIENT_H_
#define UI_AURA_SCREEN_POSITION_CLIENT_H_

#include "ui/aura/aura_export.h"
#include "ui/aura/window.h"

namespace gfx {
class Display;
class Rect;
}

namespace aura {
class Window;
namespace client {

    // An interface implemented by an object that changes coordinates within a root
    // Window into system coordinates.
    class AURA_EXPORT ScreenPositionClient {
    public:
        virtual ~ScreenPositionClient() { }

        // Converts the |screen_point| from a given |window|'s coordinate space
        // into screen coordinate space.
        virtual void ConvertPointToScreen(const Window* window,
            gfx::Point* point)
            = 0;
        virtual void ConvertPointFromScreen(const Window* window,
            gfx::Point* point)
            = 0;
        // Converts the |screen_point| from root window host's coordinate of
        // into screen coordinate space.
        // A typical example of using this function instead of ConvertPointToScreen is
        // when X's native input is captured by a drag operation.
        // See the comments for ash::GetRootWindowRelativeToWindow for details.
        virtual void ConvertHostPointToScreen(Window* root_window,
            gfx::Point* point)
            = 0;
        // Sets the bounds of the window. The implementation is responsible
        // for finding out and translating the right coordinates for the |window|.
        virtual void SetBounds(Window* window,
            const gfx::Rect& bounds,
            const gfx::Display& display)
            = 0;
    };

    // Sets/Gets the activation client on the Window.
    AURA_EXPORT void SetScreenPositionClient(Window* root_window,
        ScreenPositionClient* client);
    AURA_EXPORT ScreenPositionClient* GetScreenPositionClient(
        const Window* root_window);

} // namespace clients
} // namespace aura

#endif // UI_AURA_SCREEN_POSITION_CLIENT_H_
